// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程：https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
const db = uniCloud.database();
const users = db.collection('users');

//查重
async function isUserExist(mobile) {
	try {
		const res = await users.where({
			mobile: mobile
		}).get(); // 添加 await
		return res.data.length > 0; // 存在返回 true，否则 false
	} catch (error) {
		return false; // 错误时视为不存在
	}
}


module.exports = {
	_before: function() { // 通用预处理器

	},
	//注册用户
	async register(event) {
		const exists = await isUserExist(event.mobile); // 
		if (exists) {
			return {
				code: 1,
				message: '该手机号已经存在',
			};
		} else {
			try {
				const res = await users.add(event);
				return {
					code: 0,
					message: '操作成功',
					data: res
				};
			} catch (e) {
				//console.error('操作失败:', e);
				return {
					code: e.code || -1,
					message: e.message || '操作失败',
					error: process.env.NODE_ENV === 'development' ? e : undefined
				};
			}
		}

	},
	//登录函数
	async login(event, content) {
		const {
			mobile,
			password
		} = event;

		// 查询用户
		const res = await users.where({
			mobile,
			password
		}).get();

		if (res.data.length > 0) {
			const user = res.data[0];

			// 获取客户端信息（包含IP）
			const clientInfo = this.getClientInfo();
			const ip = clientInfo.clientIP || '0.0.0.0';
			const now = Date.now();

			try {
				// 更新用户最后登录信息
				await users.doc(user._id).update({
					last_login_date: now,
					last_login_ip: ip
				});
			} catch (updateError) {
				console.error("更新登录信息失败:", updateError);
				// 即使更新失败也不影响登录流程
			}

			// 生成 Token
			const token = `${user._id}-${Date.now()}`;
			return {
				code: 0,
				message: '登录成功',
				data: user,
				token: token
			};
		} else {
			return {
				code: -1,
				message: '用户名或密码错误'
			};
		}
	},
	//获取用户简单信息
	async getUserInfosimple(event) {
		try {
			const res = await users
				.field({
					username: true,
					mobile: true,
					avatar: true
				}).orderBy("d_ids.sort", "asc").orderBy("j_ids.sort", "asc")
				.get();
			return {
				code: 0,
				message: '获取用户信息成功',
				data: res.data
			}
		} catch (error) {
			return {
				code: -1,
				message: '查询失败'
			}
		}
	},
	// users/index.obj.js

	async getUserInfo(event) {
		try {
			const {
				page = 1,
					pageSize = 10,
					...query
			} = event;

			//console.log("收到请求参数:", event); // 打印参数
			// 添加 status = 0 条件
			// query.status = 0;
			const skip = (page - 1) * pageSize;



			let dbQuery = users.where(query);

			//console.log("实际查询条件:", query); // 显示真正传给 where 的条件

			const countRes = await dbQuery.count();
			const total = countRes.total;

			if (total === 0) {
				return {
					code: 0,
					message: "暂无数据",
					data: [],
					total: 0
				};
			}

			const res = await dbQuery
				.skip(skip)
				.limit(pageSize)
				.orderBy("d_ids.sort", "asc").orderBy("j_ids.sort", "asc")
				.get();

			//console.log("数据库返回结果:", res); // 打印原始响应

			if (res.data?.length > 0) {
				return {
					code: 0,
					message: "查询成功",
					data: res.data,
					total,
					page,
					pageSize
				};
			} else {
				return {
					code: 0,
					message: "当前页无数据",
					data: [],
					total
				};
			}
		} catch (error) {
			//console.error("数据库查询错误:", error);
			return {
				code: -2,
				message: "服务器内部错误"
			};
		}
	},

	// 更新用户信息
	async updateUserInfo(event) {
		try {
			// 1️⃣ 参数解构：明确所需字段
			const {
				_id,
				data
			} = event;

			// 2️⃣ 数据验证：防止空数据更新
			if (!data || Object.keys(data).length === 0) {
				return {
					code: -1,
					message: '无更新数据'
				};
			}

			// 3️⃣ 权限验证（示例）：确保用户有权更新目标文档
			// const currentUser = await getCurrentUser(event.auth); // 假设 event.auth 包含用户身份信息
			// if (currentUser._id !== _id) {
			//   return { code: -1, message: '无权限更新他人信息' };
			// }

			// 4️⃣ 执行更新：使用解构后的 _id 和 data
			const res = await users.doc(_id).update(data);

			// 5️⃣ 返回成功响应
			return {
				code: 0,
				message: '更新成功',
				data: res // 可选：返回更新后的结果
			};
		} catch (e) {
			// 6️⃣ 错误日志：记录详细错误信息
			//console.error('更新用户信息失败:', e);
			return {
				code: -1,
				message: '更新失败: ' + (e.message || '未知错误')
			};
		}
	},


	//司机选择框
	async getDriverSelect(event, content) {
		try {
			const res = await users.field(event.field).where(event.data).get()
			return {
				code: 0,
				message: "查询成功",
				data: res.data
			}
		} catch (e) {
			return {
				code: -1,
				message: "查询失败"
			}
		}
	},

	//根据id查询用户信息
	async getUserInfobyId(event, content) {
		try {
			let res = await users.doc(event._id).get()
			return {
				code: 0,
				message: "查询成功",
				data: res.data[0]
			}
		} catch (e) {
			return {
				code: -1,
				message: "查询失败"
			}
		}
	},

	//修改用户密码
	async modifyPwd(event, content) {
		//
		if (event._id) {
			let res = await users.doc(event._id).update(event.data)
			return {
				code: 0,
				message: '修改成功'
			}
		}
	}

}